import {
  createEntityAdapter,
  createSlice,
  PayloadAction,
} from "@reduxjs/toolkit";
import { AppState } from "@store/index";

// 使用createEntityAdapter创建一个适配器，用于操作和管理ArticleComment类型的数据
const replyCommentsAdapter = createEntityAdapter<ArticleComment>({
  // 指定数据项的唯一ID字段
  selectId: (comment) => comment.com_id,
});

// 使用createSlice创建一个名为"reply"的slice，用于管理评论回复的状态
export const replySlice = createSlice({
  name: "reply",
  // 初始状态由replyCommentsAdapter提供，用于初始化评论回复的数据结构
  initialState: replyCommentsAdapter.getInitialState(),
  reducers: {
    // 保存评论回复列表
    // 接收一个ArticleComment数组，并将其添加到状态中
    saveReply(state, action: PayloadAction<ArticleComment[]>) {
      replyCommentsAdapter.addMany(state, action.payload);
    },
    // 清空评论回复列表
    // 移除状态中所有的评论回复数据
    clearReply(state) {
      replyCommentsAdapter.removeAll(state);
    },
  },
});

// 使用适配器的getSelectors方法生成针对AppState的选择器
// 这些选择器可以用于从全局状态中选择出特定的评论回复数据
export const replySelectors = replyCommentsAdapter.getSelectors<AppState>(
  (state) => state.reply
);

// 导出slice的actions，以便在组件中直接使用这些action进行状态管理
export const { saveReply, clearReply } = replySlice.actions;
